package classpath

import (
	"os"
	"strings"
)

// 定义路径分割符
const pathListSeparator = string(os.PathListSeparator)

// 表示路径类项的接口
type Entry interface {
	// 用于寻找和加载class文件
	/*
		传参格式:
			应当是一个以 "/"分割的带有 ".class" 后缀的字符串
		返回格式:
			读取到的字节数据、最终定位到class文件的Entry，以及错误信息
	*/
	readClass(className string) ([]byte, Entry, error)
	// 相当于Java中的toString
	String() string
}

// 根据参数创建不同类型的Entry实例
func newEntry(path string) Entry {
	if strings.Contains(path, pathListSeparator) {
		return newCompositeEntry(path)
	}
	if strings.HasSuffix(path, "*") {
		return newWildcardEntry(path)
	}
	if strings.HasSuffix(path, ".jar") || strings.HasSuffix(path, ".JAR") ||
		strings.HasSuffix(path, ".zip") || strings.HasSuffix(path, ".ZIP") {
		return newZipEntry(path)
	}
	return newDirEntry(path)
}
